home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
asmutil
/
uasm.zip
/
51SYM.C
next >
Wrap
C/C++ Source or Header
|
1986-04-07
|
22KB
|
606 lines
/*
Custom Computer Consultants
Universal Cross Assembler
8051 Symbols
5 April 1986
*/
#include <stdio.h>
#include <uasm.h>
char *version = {"8051 Assembler -- V3.2 4/5/86\n"} ;
#define BSEG 0 /* Register Segment */
#define CSEG 1 /* Code Segment */
#define DSEG 2 /* Data Segment */
#define XSEG 3 /* External Data Segment */
#define ASCII 4 /* String */
#define PAGE 5 /* Page Eject */
#define RADIX 6 /* Define Radix */
#define BIT 7 /* Bit Address */
#define DB 8 /* Define Byte */
#define DS 9 /* Define Storage */
#define DW 10 /* Define Word */
#define EQU 11 /* Equate */
#define ORG 12 /* Origin */
extern int pass1 ;
extern int lbl ;
extern int i, j, k ;
extern int lnspp ;
extern int cc ;
extern int ilc ;
extern int active ;
extern int instl ;
extern int parval ;
extern int radix ;
extern int cput ;
extern int syte, sytx ;
extern unsigned unpar ;
extern unsigned ha, he, hsp ;
extern unsigned char ch ;
extern unsigned char sym ;
extern char *iptr ;
extern char segtype[] ;
extern unsigned char ib[] ;
extern unsigned char pv[] ;
extern unsigned char px[] ;
extern int pj[] ;
extern int il[] ;
extern char *pc[], *pseudo[] ;
extern int (*pp[])() ;
extern int (*ppo[])() ;
extern char ibuf[] ;
extern struct symbol symtab[] ;
#define SYMTYPE (symtab[sytx].flags&(NSEG-1))
code_seg() { return CSEG ; }
not_cseg(seg)
int seg ;
{
if( seg == BSEG || seg == DSEG ) return TRUE ;
else return FALSE ;
}
set_il()
{
il[BSEG] = 0 ;
il[CSEG] = 0 ;
il[DSEG] = 32 ;
il[XSEG] = 16384 ;
}
set_type()
{
segtype[BSEG] = '^' ;
segtype[CSEG] = '\'' ;
segtype[DSEG] = '\"' ;
segtype[XSEG] = '+' ;
}
gen(len)
int len ;
{
ib[2] = parval & 0xFF ;
ib[1] = len == 3 ? parval >> 8 : ib[2] ;
instl = len ;
ib[0] = pv[k] ;
return TRUE ;
}
nopr() { return gen(1) ; }
accm() { if( nomatch("A") ) return FALSE ;
return gen(1) ; }
abac() { if( nomatch("AB") ) return FALSE ;
return gen(1) ; }
cflg() { if( nomatch("C") ) return FALSE ;
return gen(1) ; }
dptr() { if( nomatch("DPTR") ) return FALSE ;
return gen(1) ; }
bita() { parval = eval() ;
return gen(2) ; }
dadr() { parval = eval() ;
return gen(2) ; }
adrl() { parval = eval() ;
return gen(3) ; }
adrs() { parval = eval() ;
gen(2) ;
ib[0] |= (( parval >> 3 ) & 0xE0 ) ;
return TRUE ; }
adrx() { unpar = parval = eval() ;
if ( unpar < 2048 )
{ gen(2) ; ib[0] |= (( unpar >> 3 ) & 0xE0 ) ; }
else { gen(3) ; ++ib[0] ; }
return TRUE ; }
rela() { crela(2) ;
return gen(2) ; }
crela(n)
int n ;
{
parval = eval() - ( ilc + n ) ;
if( parval > 127 || parval < -128 ) push('R') ;
}
acir() { if( nomatch("A,") ) return FALSE ;
return indr() ; }
indr() { if( nomatch("@R") ) return FALSE ;
if( ch < '0' ||
ch > '1' ) return FALSE ;
gen(1) ;
ib[0] |= ( 0x01 & ( ch - '0' ) ) ;
getch() ;
return TRUE ; }
irim() { if( !indr() ) return FALSE ;
if( nomatch(",#") ) return FALSE ;
parval = eval() ;
ib[1] = parval & 0xFF ;
++instl ;
return TRUE ; }
irac() { if( !indr() ) return FALSE ;
if( nomatch(",A") ) return FALSE ;
return TRUE ; }
irdd() { if( !indr() ) return FALSE ;
if( notcomma() ) return FALSE ;
if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
ib[1] = parval & 0xFF ;
++instl ;
return TRUE ; }
acrg() { if( nomatch("A,") ) return FALSE ;
return regr() ; }
regr() { if( nomatch("R") ) return FALSE ;
if( ch < '0' ||
ch > '7' ) return FALSE ;
gen(1) ;
ib[0] |= ( 0x07 & ( ch - '0' ) ) ;
getch() ;
return TRUE ; }
rgim() { if( !regr() ) return FALSE ;
if( nomatch(",#") ) return FALSE ;
parval = eval() ;
ib[1] = parval & 0xFF ;
++instl ;
return TRUE ; }
rgac() { if( !regr() ) return FALSE ;
if( nomatch(",A") ) return FALSE ;
return TRUE ; }
rgdd() { if( !regr() ) return FALSE ;
if( notcomma() ) return FALSE ;
if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
ib[1] = parval & 0xFF ;
++instl ;
return TRUE ; }
apdp() { if( nomatch("@A+DPTR") ) return FALSE ;
return gen(1) ; }
dpim() { if( nomatch("DPTR,#") ) return FALSE ;
parval = eval() ;
return gen(3) ; }
acim() { if( nomatch("A,#") ) return FALSE ;
parval = eval() ;
return gen(2) ; }
acdd() { if( nomatch("A,") ) return FALSE ;
if( !alphanum(ch) ) return FALSE ;
return dadr() ; }
cfcb() { if( nomatch("C,/") ) return FALSE ;
if( !alphanum(ch) ) return FALSE ;
return bita() ; }
cfba() { if( nomatch("C,") ) return FALSE ;
if( !alphanum(ch) ) return FALSE ;
return bita() ; }
idac() { if( nomatch("@DPTR,A") ) return FALSE ;
return gen(1) ; }
acid() { if( nomatch("A,@DPTR") ) return FALSE ;
return gen(1) ; }
acap() { if( nomatch("A,@A+PC") ) return FALSE ;
return gen(1) ; }
acad() { if( nomatch("A,@A+DPTR") ) return FALSE ;
return gen(1) ; }
ddim() { if( !alphanum(ch) ) return FALSE ;
if( !dadr() ) return FALSE ;
if( nomatch(",#") ) return FALSE ;
parval = eval() ;
ib[2] = parval & 0xFF ;
++instl ;
return TRUE ; }
ddir() { if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
if( notcomma() ) return FALSE ;
if ( !indr() ) return FALSE ;
ib[1] = parval & 0xFF ;
instl = 2 ;
return TRUE ; }
ddrg() { if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
if( notcomma() ) return FALSE ;
if( !regr() ) return FALSE ;
ib[1] = parval & 0xFF ;
instl = 2 ;
return TRUE ; }
ddac() { if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
if ( nomatch(",A") ) return FALSE ;
return gen(2) ; }
dddd() { if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
if ( notcomma() ) return FALSE ;
ib[1] = parval & 0xFF ;
if( !alphanum(ch) ) return FALSE ;
parval = eval() ;
ib[2] = parval & 0xFF ;
ib[0] = pv[k] ;
instl = 3 ; return TRUE ; }
barl() { bita() ;
if( notcomma() ) return FALSE ;
crela(3) ;
ib[2] = parv